﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CapaNegocio;
using System.Collections;

public partial class abmOrdenesTrabajo_GenerarOT : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
         if (!IsPostBack)
        {
            if (Session["UsuLogin"] == null)
            {
                Response.Redirect("../Default.aspx", true);
            }
            else
            {
                Usuario usu = ((Usuario)(Session["UsuLogin"]));
                Label1.Text = usu.Apellido + ", " + usu.Nombre + " (" + usu.Perfil.Nombre + ")";


                List<TipoDoc> tipos = TipoDoc.buscarTiposDoc();
                tiposDoc.DataSource = tipos;
                tiposDoc.DataTextField = "nombre";
                tiposDoc.DataValueField = "codigo";
                tiposDoc.DataBind();

                if (!String.IsNullOrEmpty(Request.QueryString["nroOT"]))
                {
                    OrdenTrabajo orden = OrdenTrabajo.buscarOrden(Convert.ToInt32(Request.QueryString["nroOT"]));
                    rellenarOT(orden);

                    Session["OT"] = orden;

                    botonBuscarCliente_Click(sender,e);
                    botonBuscar_Click(sender, e);
                    if (Request.QueryString["action"] == "delete")
                    {
                        deshabilitarCampos();
                    }
                }
            }
         }
    }

    private void rellenarOT(OrdenTrabajo orden)
    {
        TextBoxNombre.Text = orden.Cliente.Nombre;
        TextBoxApellido.Text = orden.Cliente.Apellido;
        TextBoxNroPresup.Text = Convert.ToString(orden.Presupuesto.Id).Trim();
        TextBoxFechaInicio.Text = orden.FechaComienzo.ToShortDateString();
        TextBoxDireccion.Text = orden.Cliente.Direccion;
        TextBoxTelefono.Text = orden.Cliente.Telefono;
        TextBoxDni.Text = orden.Cliente.NroDoc.Trim();
        TextBoxEstadoPresup.Text = orden.Presupuesto.Estado.Descripcion;
        TextBoxNroPresup.Text = Convert.ToString(orden.Presupuesto.Id);
    }

    private void deshabilitarCampos() {
        TextBoxFechaInicio.Enabled = false;
        TextBoxDni.Enabled = false;
        TextBoxNroPresup.Enabled = false;
        botonBuscarCliente.Visible = false;
        botonBuscarPresupuesto.Visible = false;
    }

    protected void botonCancelar_Click(object sender, EventArgs e)
    {
        if (Session["Presupuesto"] != null){
           
            Session.Remove("Presupuesto");
        }

        
        if (Session["Cliente"] != null)
        {
            Session.Remove("Cliente");   
        }


        Usuario usu = ((Usuario)(Session["UsuLogin"]));

        if (usu.Perfil.Id == 3) {

            Response.Redirect("../MenuConstructor.aspx");
        }

        Response.Redirect("../MenuAdministrativo.aspx");

    }
    protected void botonAceptar_Click(object sender, EventArgs e)
    {
        if (Request.QueryString["action"] == "delete")
        {

            OrdenTrabajo ot = (OrdenTrabajo)Session["OT"];
            bool ok = ot.eliminar();
            if (ok)
            {


                Usuario usu = ((Usuario)(Session["UsuLogin"]));

                if (usu.Perfil.Id == 3)
                {

                    Session["ruta"] = "MenuConstructor.aspx";
                }
                else
                {
                    Session["ruta"] = "MenuAdministrativo.aspx";
                }
                
                Session["mensaje"] = "Se ha eliminado la orden de trabajo: " + Request.QueryString["nroOT"];
                Response.Redirect("../Exito.aspx");
            }
            else
            {
                Session["error"] = "La orden de trabajo no puede ser eliminada ya que se encuentra en proceso de construcción.";

                Usuario usu = ((Usuario)(Session["UsuLogin"]));

                if (usu.Perfil.Id == 3)
                {

                    Session["ruta"] = "MenuConstructor.aspx";
                }
                else
                {
                    Session["ruta"] = "MenuAdministrativo.aspx";
                }
                Response.Redirect("../Error.aspx");
            }

        }
        else
        {
            Presupuesto presup = (Presupuesto)Session["Presupuesto"];
            Cliente cliente = (Cliente)Session["Cliente"];


            OrdenTrabajo otExist = OrdenTrabajo.buscarPresupuesto(presup);

            if (otExist == null || otExist.Presupuesto.Id == presup.Id)
            {
                if (Request.QueryString["action"] == "edit")
                {

                    OrdenTrabajo ot = (OrdenTrabajo)Session["OT"];

                    bool ok = ot.actualizar(presup.Id, cliente.Id, Convert.ToDateTime(TextBoxFechaInicio.Text));

                    if (ok == true)
                    {

                        Usuario usu = ((Usuario)(Session["UsuLogin"]));

                        if (usu.Perfil.Id == 3)
                        {

                            Session["ruta"] = "MenuConstructor.aspx";
                        }
                        else
                        {
                            Session["ruta"] = "MenuAdministrativo.aspx";
                        }
                        Session["mensaje"] = "Se ha modificado la orden de trabajo: " + ot.Codigo;
                        Response.Redirect("../Exito.aspx");
                    }
                    else
                    {
                        Session["error"] = "La orden de trabajo no puede ser modificada ya que se encuentra en curso.";

                        Usuario usu = ((Usuario)(Session["UsuLogin"]));

                        if (usu.Perfil.Id == 3)
                        {

                            Session["ruta"] = "MenuConstructor.aspx";
                        }
                        else
                        {
                            Session["ruta"] = "MenuAdministrativo.aspx";
                        }
                        Response.Redirect("../Error.aspx");
                    }


                }
                else
                {

                    if (presup != null && cliente != null)
                    {

                        long ot = OrdenTrabajo.crearOT(cliente, presup, Convert.ToDateTime(TextBoxFechaInicio.Text), Convert.ToDateTime(TextBoxFechaInicio.Text));

                        if (ot > 0)
                        {

                            Usuario usu = ((Usuario)(Session["UsuLogin"]));

                            if (usu.Perfil.Id == 3)
                            {

                                Session["ruta"] = "MenuConstructor.aspx";
                            }
                            else
                            {
                                Session["ruta"] = "MenuAdministrativo.aspx";
                            }
                            Session["mensaje"] = "Se ha creado la orden de trabajo: " + ot.ToString();
                            Response.Redirect("../Exito.aspx");
                        }
                        else
                        {
                            Session["error"] = "Se produjo un error inesperado al intentar crear la orden de trabajo";

                            Usuario usu = ((Usuario)(Session["UsuLogin"]));

                            if (usu.Perfil.Id == 3)
                            {

                                Session["ruta"] = "MenuConstructor.aspx";
                            }
                            else
                            {
                                Session["ruta"] = "MenuAdministrativo.aspx";
                            }
                            Response.Redirect("../Error.aspx");
                        }
                    }
                    else
                    {

                        Session["error"] = "Debe buscar un presupuesto y un cliente primeramente";
                        
                Usuario usu = ((Usuario)(Session["UsuLogin"]));

                if (usu.Perfil.Id == 3)
                {

                    Session["ruta"] = "MenuConstructor.aspx";
                }
                else
                {
                    Session["ruta"] = "MenuAdministrativo.aspx";
                }
                        Response.Redirect("../Error.aspx");

                    }
                }
            } else {

                Session["error"] = "El presupuesto con numero: " + presup.Id + " ya se encuentra asignado a la orden de trabajo: " + otExist.Codigo;
                Session["ruta"] = "abmOrdenesTrabajo/ConsultarOrdenes.aspx";
                Response.Redirect("../Error.aspx");

            }
        }
       
    }
    protected void botonBuscar_Click(object sender, EventArgs e)
    {
        Presupuesto presup = Presupuesto.buscarPresupuesto(Convert.ToInt64(TextBoxNroPresup.Text));

        if (presup != null)
        {

        

                if (presup.Estado.Id == 3)
                {
                    Session["Presupuesto"] = presup;
                    TextBoxEstadoPresup.Text = presup.Estado.Descripcion;
                }
                else
                {

                    Session["error"] = "El presupuesto con numero: " + presup.Id + " no se encuentra aprobado. Su estado actual es: " + presup.Estado.Descripcion;
                    Session["ruta"] = "abmOrdenesTrabajo/GenerarOT.aspx";
                    Response.Redirect("../Error.aspx");
                }
           
        }
        else
        {
            Session["error"] = "El presupuesto con numero: " + TextBoxNroPresup.Text + " no existe. Ingrese otro número de presupuesto.";
            Session["ruta"] = "abmOrdenesTrabajo/GenerarOT.aspx";
            Response.Redirect("../Error.aspx");
        }
    }
    protected void botonBuscarCliente_Click(object sender, EventArgs e)
    {

        Cliente cliente=null;
        if (Session["OT"] != null)
        {
            OrdenTrabajo o = (OrdenTrabajo)Session["OT"];
            cliente = Cliente.buscarCliente(TipoDoc.buscarTipoDoc(Convert.ToInt32(o.Cliente.TipoDoc.Codigo)).Nombre, o.Cliente.NroDoc);
        }
        else {
             cliente = Cliente.buscarCliente(TipoDoc.buscarTipoDoc(Convert.ToInt32(tiposDoc.SelectedValue)).Nombre, TextBoxDni.Text);
        }
        
        
        if (cliente != null)
        {
            
            Session["Cliente"] = cliente;
            TextBoxApellido.Text = cliente.Apellido;
            TextBoxNombre.Text = cliente.Nombre;
            TextBoxDireccion.Text = cliente.Direccion;
            TextBoxTelefono.Text = cliente.Telefono;
        }
        else
        {
            Session["error"] = "El cliente con numero de documento: " + TextBoxDni.Text + " no existe. Ingrese otro número de documento.";
            Session["ruta"] = "abmOrdenesTrabajo/GenerarOT.aspx";
            Response.Redirect("../Error.aspx");
        }
    }
  
}